package top.lyc829.zzl_android.logic.util.gson;

import com.google.gson.Gson;

import java.io.Reader;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;

import top.lyc829.zzl_android.logic.bean.ResultBean;

/**
 * 新的json解析类
 * @Author lyc
 * @create 2021-03-23 21:57
 */
public class JsonUtilNew {


    /**
     * 解析ResultBean中data字段为json对象的情况
     * @param jsonStr json字符串
     * @param clazz json对象类
     * @param <T>
     * @return ResultBean
     */
    public static <T> ResultBean<T> fromJsonObject(String jsonStr, Class<T> clazz) {
        Type type = new ParameterizedTypeImpl(ResultBean.class, new Class[]{clazz});
        return new Gson().fromJson(jsonStr, type);
    }

    /**
     * 解析ResultBean中data字段为数组的情况
     * @param jsonStr json字符串
     * @param clazz 数组中对象类型
     * @param <T>
     * @return ResultBean
     */
    public static <T> ResultBean<List<T>> fromJsonArray(String jsonStr, Class<T> clazz) {
        // 生成List<T> 中的 List<T>
        Type listType = new ParameterizedTypeImpl(List.class, new Class[]{clazz});
        // 根据List<T>生成完整的Result<List<T>>
        Type type = new ParameterizedTypeImpl(ResultBean.class, new Type[]{listType});
        return new Gson().fromJson(jsonStr, type);
    }

    public static <T> String mapToJson(Map<String, T> map) {
        Gson gson = new Gson();
        return gson.toJson(map);
    }


    public static <T> String listToJson(List<T> list) {
        Gson gson = new Gson();
        return gson.toJson(list);
    }

}
